﻿#ifndef DATAPROCESS_H
#define DATAPROCESS_H


#include <QObject>
#include <QByteArray>
#include <QVector>
#include <cglobals.h>
#include <general.h>
#include <QDataStream>

class DataProcess : public QObject
{
    Q_OBJECT
public:
    explicit DataProcess(QObject *parent = nullptr);    
    ~DataProcess();
    void updateReceivedCyclesData(QByteArray* pData);
    void initAllPages(struct _format_settings* formatSetting);                                              // 所有页面数据初始化
    void decodeToolBarData(QByteArray data);                                                                // 解码工具栏数据
    QString getCycleNumber();                                                                               // 获取周期号
    QString getCycleTime();                                                                                 // 获取周期时间
    pPAGE_CONTEXT decodePageDatas(QByteArray data);                                                         // 解码单页数据
    void addDataToCurvesList(QByteArray data, PDATA_CONTEXT pSingleVarData);                                // 解码单个数据
    void saveLogToFile(QString filePath);                                                                   // 保存日志
    void setCurrentPage(int page);                                                                          // 设置当前页码
    void setFormatSetting(struct _format_settings* formatSetting);                                          // 设置格式
    PDATA_CONTEXT addCurve(QString name);                                                                   // 添加曲线
    void delCurve(QString name);                                                                            // 删除曲线
    QVector<PDATA_CONTEXT>* getCurvesList();                                                                  // 获取绘图列表
    void clearAllPagesData();                                                                               // 清空所有页数据
    void clearToolBarData();                                                                                // 清空工具栏数据
    void clearCurvesList();                                                                                 // 清空绘图列表
    void clearReceivedDatas();                                                                              // 清空所有接收到的udp数据
    void setDataSource(int* pDataSource);                                                                   // 设置数据来源
    void printPage();
    int getCyclesCount();                                                                                  // 获取总共接收了多少周期
    QByteArray getPauseData(int cycle);                                                                     // 获取暂停时的某个周期数据
    void setPause();
    void resume();
//    void regularSaveSlot(QString filePath);                                                                 //
    static STRVALUE getSubStrFromString(QString str, quint32 start, quint8 len, bool bigEndian = false);    // 获取子串
    static STRVALUE getDWORDSubStrFromString(QString str, quint32 start, quint32 bitStart, quint8 len, bool bigEndian = false);    // 获取子串，对应于DWORD数据

    static QDateTime getDateTimeFromData(QByteArray data, struct _format_settings* pFormatSetting);          // 解码工具栏数据

signals:
    void pageDataProcessed(QString cycleNumber, QString cycleTime,  pPAGE_CONTEXT pPageData);


public slots:
    void msgProcessSlot(QByteArray* pData);


private:
     QVector<QByteArray*>* pReceivedAllCyclesData = NULL;                                                   // 所有周期数据
//     QVector<QByteArray*>* pPauseData = NULL;                                                                        // 暂停时的数据
     QVector<pTOOLBAR_DATA>* pToolBarData = NULL;                                                            // 工具栏时间周期显示
     QVector<pPAGE_CONTEXT>* pAllPagesData = NULL;                                                          // 每页内容显示
     int* pCyclesCount = NULL;                                                                              // 接收到的总周期数
     int* pCurrentPage = NULL;
     struct _format_settings* pFormatSetting = NULL;
     QVector<PDATA_CONTEXT>* pCurvesList = NULL;
     int* pDataSource = NULL;                                                                                // 数据来源
     bool pauseFlag = false;
};

#endif // DATAPROCESS_H
